home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / compuserve-file-archive / 05 Programming / SHLRAM.SDA / DPRINTF.A < prev    next >
Text File  |  2019-04-13  |  7KB  |  519 lines

  1. ;
  2. ; SHELLRAM
  3. ;
  4. ;  ┬Y: ┴DRIAN ╨EPPER
  5. ;      ╘ORONTO, ╧NTARIO
  6. ;
  7. ;  BASED ON, BUT HEAVILY MODIFIED FROM
  8. ;  THE ╨RO-╠INE/╙PINNAKER
  9. ;    ├ ╨╧╫┼╥/╨╧╫┼╥ ├ SHELL FOR THE
  10. ;  ├OMMODORE 64 HOME COMPUTER.
  11. ;
  12. ;  ╘HE SHELL WAS MODIFIED TO REDUCE
  13. ;  THE SIZE OF THE CODE, AND ARRANGE
  14. ;  THINGS SO MEMORY PAGE 22 (HEX $16)
  15. ;  WILL BE FREE FOR USE AS A "╥┴═DISK
  16. ;  ╔NTERFACE ╨AGE", FOR USE WITH THE
  17. ;  ├OMMODORE 1764 256╦ ╥┴═ EXPANDER
  18. ;  FOR THE ├OMMODORE 64
  19. ;
  20. ;  ╘HIS (BASICALLY) ALLOWS ALL PROGRAMS
  21. ;  DESIGNED TO RUN UNDER THE SHELL TO
  22. ;  OPERATE WITH THE ╥┴═ DISK
  23. ;
  24. ;
  25. ; DPRINTF.A - PRINTF IMPLEMENTATION
  26. ;   ROUTINES
  27. ;
  28. ;
  29. ;  ╔T MUST BE IN THE SHELL TO SAVE ├
  30. ; PROGRAM SIZE.  ╔T WOULD BE NICE TO BE
  31. ; ABLE TO LINK IN THE VERSION FROM THE
  32. ; DISTRIBUTION LIBRARY DISK, BUT SEVERAL
  33. ; PROBLEMS PREVENT THIS, SO THIS VERSION
  34. ; IS PROVIDED HERE.
  35. ;
  36. ;  ALSO GETNUM ROUTINE USED BY SHELL
  37. ;
  38.  .REF STDOUFL
  39. ;
  40.  .REF ARGSTK
  41. ;
  42.  .REF CHKOUT
  43.  .REF CLRCHN
  44.  .REF CHROUT
  45. ;
  46.  .DEF DPRINTF
  47.  .DEF DSPRINT
  48.  .DEF DFPRINT
  49. ;
  50.  .DEF GETNUM
  51. ;
  52.  .REF C$FUNCTñINIT
  53.  .REF PRFBUF  ; MUST BE FORCED ABOVE $1600 TO $16FF PAGE
  54. ;             ; ALSO WE COMBINE WITH 'STRAC' TO SAVE SPACE
  55. ;
  56. FLTBUF=$0100  ; BASIC ROUTINE FLOATING POINT CONVERSION BUFFER
  57. ;             ;  LIVES IN THIS PRECARIOUS PLACE!
  58. ;
  59. DSPRINT JSR C$FUNCTñINIT  ; SPRINTF
  60.  LDA ARGSTK,X
  61.  STA $FB ; PTR TO OUTPUT STR IN FB,FC
  62.  INX
  63.  LDA ARGSTK,X
  64.  STA $FC
  65.  INX
  66.  STX $4C
  67.  LDA #$00
  68.  JMP ESPRINT
  69. ;
  70. DPRINTF JSR C$FUNCTñINIT  ; PRINTF
  71.  STX $4C
  72.  LDA #$02
  73.  BNE T0160F
  74. ;
  75. DFPRINT JSR C$FUNCTñINIT  ; FPRINTF
  76.  LDA ARGSTK,X
  77.  INX
  78.  INX
  79.  STX $4C
  80. T0160F CMP #2
  81.  BNE T0170F
  82.  LDX STDOUFL
  83.  BNE T0170F
  84.  JSR CLRCHN
  85.  JMP EPRINTF
  86. T0170F TAX
  87.  JSR CHKOUT
  88. EPRINTF LDA #$01
  89. ESPRINT STA   $4D ; FLAG; 0 MEANS SPRINTF
  90.  LDX $4C
  91.  LDA ARGSTK,X
  92.  INX
  93.  STA   $FD ; FMT STR ADDR IN FD,FE
  94.  LDA ARGSTK,X
  95.  INX
  96.  STA  $FE
  97.  STX $4C
  98.  LDY #$FF
  99. PRFMNLP INY
  100.  LDA ($FD),Y
  101.  BNE T0190F
  102.  LDY $4D
  103.  BNE T0180F
  104.  STA ($FB),Y
  105. T0180F JMP CLRCHN
  106. T0190F CMP #'%
  107.  BNE PRFNPER
  108.  JSR PRFPERC
  109.  LDA ($FD),Y
  110.  CMP #'D
  111.  BNE PRFNOTD
  112.  JSR PRFD
  113.  JMP PRFPARG
  114. PRFNOTD CMP #'U
  115.  BNE PRFNOTU
  116.  JSR PRFU
  117.  JMP PRFPARG
  118. PRFNOTU CMP #'X
  119.  BNE PRFNOTX
  120.  JSR PRFX
  121.  JMP PRFPARG
  122. PRFNOTX CMP #'O
  123.  BNE PRFNOTO
  124.  JSR PRFO
  125.  JMP PRFPARG
  126. PRFNOTO CMP #'C
  127.  BNE PRFNOTC
  128.  JSR PRFC
  129.  JMP PRFPARG
  130. PRFNOTC CMP #'S
  131.  BNE PRFNOTS
  132.  JSR PRFS
  133.  JMP PRFPARG
  134. PRFNOTS CMP #'F
  135.  BNE PRFNOTF
  136.  JSR PRFF
  137.  JMP PRFPARG
  138. PRFNOTF CMP #'G
  139.  BNE PRFNOTG
  140.  JSR  PRFG
  141.  JMP  PRFPARG
  142. PRFNOTG CMP #0
  143.  BEQ PRFNULB
  144.  JSR PRFPFC
  145.  JMP PRFMNLP
  146. PRFNULB DEY
  147.  JMP PRFMNLP
  148. PRFNPER JSR PRFPFC
  149.  JMP PRFMNLP
  150. PRFPFC STY $51
  151.  LDY $4D
  152.  BEQ T0200F
  153.  LDY $51
  154.  JMP CHROUT
  155. T0200F STA ($FB),Y
  156.  INC $FB
  157.  BNE T0210F
  158.  INC $FC
  159. T0210F LDY $51
  160.  RTS
  161. PRFGARG STY $4B
  162.  LDX $4C
  163.  LDA ARGSTK,X
  164.  STA  $5A
  165.  INX
  166.  LDA ARGSTK,X
  167.  STA  $5B
  168.  INX
  169.  STX $4C
  170.  LDA #$00
  171.  STA  $58
  172.  RTS
  173. PRFU LDA #$01
  174.  BNE T0220F
  175. PRFD LDA #$00
  176. T0220F STA  $51
  177.  JSR PRFGARG
  178.  STA  $54
  179.  LDA  $5B
  180.  BPL T0240F
  181.  LDY $51
  182.  BNE T0240F
  183.  EOR #$FF
  184.  STA $5B
  185.  LDA $5A
  186.  EOR #$FF
  187.  STA  $5A
  188.  INC $5A
  189.  BNE T0230F
  190.  INC $5B
  191. T0230F LDA  #'-
  192.  STA PRFBUF
  193.  INC $54
  194. T0240F LDX #$04
  195. T0250B LDY #$00
  196. T0260B LDA  $5A
  197.  SEC
  198.  SBC T0310F,X
  199.  STA  $51
  200.  LDA  $5B
  201.  SBC T0320F,X
  202.  BCC T0270F
  203.  STA  $5B
  204.  LDA  $51
  205.  STA  $5A
  206.  INY
  207.  BNE T0260B
  208. T0270F TYA
  209.  BEQ T0280F
  210.  STA  $58
  211. T0280F LDA  $58
  212.  BEQ T0290F
  213.  LDA PRFHEXT,Y
  214.  LDY $54
  215.  STA PRFBUF,Y
  216.  INC $54
  217. T0290F DEX
  218.  BPL T0250B
  219.  LDX $54
  220. PRFNRTS LDY $4B
  221.  LDA  $58
  222.  BNE T0300F
  223.  LDA  #'0
  224.  STA PRFBUF,X
  225.  INX
  226. T0300F RTS
  227. T0310F .BYTE $01,$0A,$64,$E8,$10
  228. T0320F .BYTE $00,$00,$00,$03,$27
  229. PRFG LDA  $1
  230.  PHA
  231.  ORA #$01
  232.  STA  $1
  233.  STY $4B
  234.  CLC
  235.  LDA #$3C
  236.  ADC $4C
  237.  LDY #$03
  238.  JSR $BBA2
  239.  JSR $BDDD
  240.  LDY #$00
  241.  LDX #$00
  242. PRFGLP LDA FLTBUF,Y
  243.  BEQ T0340F
  244.  CMP #$20
  245.  BEQ T0330F
  246.  STA PRFBUF,X
  247.  INX
  248. T0330F INY
  249.  JMP PRFGLP
  250. T0340F CLC
  251.  LDA  $4C
  252.  ADC #$05
  253.  STA $4C
  254.  LDY $4B
  255.  PLA
  256.  STA $1
  257.  RTS
  258. PRFF LDA $1
  259.  PHA
  260.  ORA #$01
  261.  STA  $1
  262.  STY $4B
  263.  CLC
  264.  LDA #$3C
  265.  ADC $4C
  266.  LDY #$03
  267.  JSR $BBA2
  268.  JSR $BDDD
  269.  LDA #0
  270.  STA  $56
  271.  STA  $55
  272.  STA  $53
  273.  LDA  $50
  274.  BNE T0350F
  275.  INC $56
  276. T0350F BPL T0360F
  277.  LDA #6
  278.  STA  $50
  279. T0360F LDY #0
  280.  LDX #0
  281. PRFFLP LDA FLTBUF,Y
  282.  BEQ T0400F
  283.  CMP #$20
  284.  BEQ T0390F
  285.  CMP #$45
  286.  BNE T0370F
  287.  JSR PRFEXP
  288.  LDA #0
  289.  STA  $55
  290.  INC $53
  291.  LDA #$45
  292. T0370F STA $51
  293.  LDA  $55
  294.  BEQ T0375F
  295.  LDA  $50
  296.  BEQ T0390F
  297.  DEC $50
  298. T0375F LDA $51
  299.  CMP #$2E
  300.  BNE T0380F
  301.  LDA  $56
  302.  BNE T0400F
  303.  INC $55
  304. T0380F LDA $51
  305.  STA PRFBUF,X
  306.  INX
  307. T0390F INY
  308.  JMP PRFFLP
  309. T0400F CLC
  310.  LDA $4C
  311.  ADC #5
  312.  STA $4C
  313.  LDY $4B
  314.  PLA
  315.  STA $1
  316. PRFEXP LDA $56
  317.  BNE T0430F
  318.  LDA $53
  319.  BNE T0430F
  320.  LDA $55
  321.  BNE T0410F
  322.  LDA #$2E
  323.  STA PRFBUF,X
  324.  INX
  325. T0410F LDA $50
  326.  BEQ T0430F
  327.  LDA #$30
  328. T0420B STA PRFBUF,X
  329.  INX
  330.  DEC $50
  331.  BNE T0420B
  332. T0430F RTS
  333. PRFX JSR PRFGARG
  334.  LDX #0
  335.  LDA #4
  336.  STA  $5C
  337. T0440B LDA $5B
  338.  LSR A
  339.  LSR A
  340.  LSR A
  341.  LSR A
  342.  TAY
  343.  BNE T0450F
  344.  LDA  $58
  345.  BEQ T0460F
  346. T0450F LDA PRFHEXT,Y
  347.  STA PRFBUF,X
  348.  INX
  349.  STX $58
  350. T0460F LDY #4
  351. T0470B ASL $5A
  352.  ROL $5B
  353.  DEY
  354.  BNE T0470B
  355.  DEC $5C
  356.  BNE T0440B
  357.  JMP PRFNRTS
  358. PRFHEXT .BYTE "0123456789ABCDEF"
  359. PRFO JSR PRFGARG
  360.  LDX #0
  361.  LDA $5B
  362.  BPL T0480F
  363.  LDA #$31
  364.  STA PRFBUF
  365.  INX
  366.  STX $58
  367. T0480F LDA #$05
  368.  STA  $5C
  369. T0490B LDA  $5B
  370.  LSR A
  371.  LSR A
  372.  LSR A
  373.  LSR A
  374.  AND #7
  375.  TAY 
  376.  BNE T0500F
  377.  LDA $58
  378.  BEQ T0510F
  379. T0500F LDA PRFHEXT,Y
  380.  STA PRFBUF,X
  381.  INX
  382.  STX $58
  383. T0510F LDY #$03
  384. T0520B ASL $5A
  385.  ROL $5B
  386.  DEY
  387.  BNE T0520B
  388.  DEC $5C
  389.  BNE T0490B
  390.  JMP PRFNRTS
  391. PRFC LDX $4C
  392.  LDA ARGSTK,X
  393.  STA PRFBUF
  394.  INX
  395.  INX
  396.  STX $4C
  397.  LDX #1
  398.  RTS
  399. PRFS STY $4B
  400.  LDX $4C
  401.  LDA ARGSTK,X
  402.  STA  $20
  403.  INX
  404.  LDA ARGSTK,X
  405.  STA  $21
  406.  INX
  407.  STX $4C
  408.  LDY #0
  409. T0530B LDA $50
  410.  BEQ T0540F
  411.  LDA ($20),Y
  412.  BEQ T0540F
  413.  STA PRFBUF,Y
  414.  INY
  415.  DEC $50
  416.  BNE T0530B
  417. T0540F TYA
  418.  TAX
  419.  LDY $4B
  420.  RTS
  421. PRFPERC LDA #0 ; PRINTF, PERCENT FOUND¬
  422.  STA  $4E
  423.  INY
  424.  LDA ($FD),Y
  425.  CMP #$2D
  426.  BNE T0550F
  427.  INC $4E
  428.  INY
  429. T0550F LDA ($FD),Y
  430.  CMP #$30
  431.  BEQ T0560F
  432.  LDA #$20
  433. T0560F STA  $52
  434.  JSR PRFGFLD
  435.  STA  $4F
  436.  LDA ($FD),Y
  437.  CMP #'.
  438.  BNE T0570F
  439.  INY
  440.  JSR PRFGFLD
  441.  JMP T0580F
  442. T0570F LDA #$FF
  443. T0580F STA  $50
  444.  LDA ($FD),Y
  445.  CMP #$4C
  446.  BNE T0590F
  447.  INY
  448. T0590F RTS
  449. PRFGFLD LDA ($FD),Y
  450.  CMP #'*
  451.  BNE T0600F
  452.  LDX $4C
  453.  LDA ARGSTK,X
  454.  INX
  455.  INX
  456.  STX $4C
  457.  INY
  458.  RTS
  459. ;
  460. T0600F JMP PFGNUM ;; AND RETURN
  461. ;
  462. PRFPARG STX $54
  463.  LDA $4E
  464.  BNE T0630F
  465.  JSR PRFOUT
  466. T0630F LDX #0
  467. T0640F CPX $54
  468.  BEQ T0650F
  469.  LDA PRFBUF,X
  470.  JSR PRFPFC
  471.  INX
  472.  BNE T0640F
  473. T0650F LDA $4E
  474.  BEQ T0660F
  475.  JSR PRFOUT
  476. T0660F JMP PRFMNLP
  477. PRFOUT SEC
  478.  LDA  $4F
  479.  SBC $54
  480.  BCC T0680F
  481.  TAX
  482.  BEQ T0680F
  483. T0670F LDA $52
  484.  JSR PRFPFC
  485.  DEX
  486.  BNE T0670F
  487. T0680F RTS
  488. ;
  489. ;
  490. ; GETNUM - TURN PTR IN X,Y TO (SMALL) NUMBER IN A
  491. ;   USES $FD,$FE, $5A,$5B (AND Y AND A)
  492. ;
  493. GETNUM = *
  494.  STX $FD
  495.  STY $FE
  496.  LDY #0
  497. ;
  498. ; PFGNUM - SPECIAL ENTRY FOR PRINTF USE ONLY
  499. ;  ASSUMES $FD,$FE AND Y SET UP ALREADY
  500. ;
  501. PFGNUM LDA #$00
  502.  STA  $5A
  503. T0610B LDA ($FD),Y
  504.  EOR #'0  ;; ASSUMES ASCII
  505.  CMP #10
  506.  BCS T0620F
  507.  STA  $5B
  508.  LDA  $5A
  509.  ASL $5A
  510.  ASL $5A
  511.  ADC $5A
  512.  ASL A
  513.  ADC $5B
  514.  STA $5A
  515.  INY
  516.  BNE T0610B
  517. T0620F LDA $5A
  518.  RTS
  519.